package org.sxf.app.sign.provider;

import android.content.Context;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.lidroid.xutils.util.LogUtils;

/**
 * Created by zqc on 17/1/17.
 */
public class LocProviderSingleton implements BDLocationListener {
    private static LocProviderSingleton ourInstance = new LocProviderSingleton();

    public static LocProviderSingleton getInstance() {
        return ourInstance;
    }

    private LocProviderSingleton() {
    }



    public LocationClient mLocationClient = null;

    private boolean isLocSuccess = false;
    private double lon;
    private double lat;


    public void initProvider(Context context){
        mLocationClient = new LocationClient(context);
        mLocationClient.registerLocationListener(this);

        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
        );//可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        option.setCoorType("bd09ll");//可选，默认gcj02，设置返回的定位结果坐标系
        int span=1000;
        option.setScanSpan(span);//可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(false);//可选，设置是否需要地址信息，默认不需要
        option.setOpenGps(true);//可选，默认false,设置是否使用gps
        option.setLocationNotify(true);//可选，默认false，设置是否当GPS有效时按照1S/1次频率输出GPS结果
        option.setIsNeedLocationDescribe(false);//可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
        option.setIsNeedLocationPoiList(false);//可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);//可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
        option.SetIgnoreCacheException(true);//可选，默认false，设置是否收集CRASH信息，默认收集
        option.setEnableSimulateGps(false);//可选，默认false，设置是否需要过滤GPS仿真结果，默认需要

        mLocationClient.setLocOption(option);
    }

    public void start(){
        mLocationClient.start();
    }

    public void stop(){
        mLocationClient.stop();
    }

    @Override
    public void onReceiveLocation(BDLocation bdLocation) {
        LogUtils.d("onReceiveLocation:" + bdLocation.getLocType());
        switch (bdLocation.getLocType()){
            case 61:
            case 65:
            case 66:
            case 67:
            case 68:
            case 161:

                isLocSuccess = true;
                lon = bdLocation.getLatitude();
                lat = bdLocation.getLongitude();
                LogUtils.d("Lon:" + lon + ",Lat:" + lat);
                break;
        }
    }

    public boolean isLocSuccess() {
        return isLocSuccess;
    }

    public double getLon(){
        return lon;
    }

    public double getLat(){
        return lat;
    }
}
